package com.xj.algorithm.leetcode;

/**
 * 2的幂
 */
public class L231_判断一个数是否为2的幂 {

    /**
     * 给定一个整数，编写一个函数来判断它是否是 2 的幂次方。
     *
     * 示例 1:
     *
     * 输入: 1
     * 输出: true
     * 解释: 20 = 1
     * 示例 2:
     *
     * 输入: 16
     * 输出: true
     * 解释: 24 = 16
     * 示例 3:
     *
     * 输入: 218
     * 输出: false
     */

    public static void main(String[] args) {
        System.out.println(isPowerOfTwoGood(0));
        System.out.println(isPowerOfTwoGood(1));
        System.out.println(isPowerOfTwoGood(16));
        System.out.println(isPowerOfTwoGood(218));
    }

    //自己的解法：位运算，找到第一个1，然后抹掉，看结果是否为0
    public static boolean isPowerOfTwo(int n) {
        if(n==0){
            return false;
        }
        int value=0;
        while (value==0){
            value=n&1;
            n=n>>1;
            if(value==1){
                if(n==0){
                    return true;
                }else {
                    return false;
                }
            }
        }
        return false;
    }

    //精彩解法：位运算 n&(n-1),注意数字0
    public static boolean isPowerOfTwoGood(int n) {
        return  (n>0) && (n & (n - 1)) == 0;
    }
}